#include "iuPacketFactory.hpp"
#include <cstdlib>
#include <cstdio>
#include "iuPacketIP.hpp"
#include "iuPacketICMP.hpp"
#include "iuPacketARP.hpp"

/**
 * @brief Fabrique chargee d'instancier les paquets correspondants aux differents protocoles
 * @param level le niveau d'encapsulation du paquet a instancie (e.g. 2 pour IP, 3 pour ICMP...)
 * @param type le type du protocole du paquet a instancie (e.g. 0x800 pour IP, 0x1 pour ICMP...)
 * @return Renvoie le nouveau paquet instancie, ou NULL si le protocole n'est pas supporte
 * @note La valeur renvoyee devra etre liberee avec "delete"
 */
iuPacket *iuPacketFactory::create(unsigned int level, unsigned int type)
{
   if (level == 2 && type == 0x800)
      return new iuPacketIP();
   else if (level == 2 && type == 0x806)
      return new iuPacketARP();
   else if (level == 3 && type == 0x1)
      return new iuPacketICMP();
   else
   {
      printf("[Packet-Factory] Protocol 0x%X (%d) unknown\n", type, level);
      return NULL;
   }
}
